package com.sam4cloud.common.feign.annotation;

import com.sam4cloud.common.feign.config.FeignAutoConfiguration;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Import;

import java.lang.annotation.*;

/**
 * 自定义feign注解 启用Feign扫描及header配置
 *
 * @author yan
 * @Retention RetentionPolicy
 * SOURCE：注解仅存在于源码中，在class字节码文件中不包含
 * CLASS：默认的保留策略，注解会在class字节码文件中存在，但运行时无法获得
 * RUNTIME：注解会在class字节码文件中存在，在运行时可以通过反射获取到
 * @Target： 作用于ElementType
 * TYPE：接口、类、枚举
 * FIELD：字段、枚举的常量
 * METHOD：方法
 * PARAMETER：方法参数
 * CONSTRUCTOR：构造函数
 * LOCAL_VARIABLE：局部变量
 * ANNOTATION_TYPE：注解
 * PACKAGE：包
 * @Document：说明该注解将被包含在javadoc中
 * @Import 自动加载类
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@EnableFeignClients
@Import({FeignAutoConfiguration.class})
public @interface EnableFeignConfig {

    String[] value() default {};

    String[] basePackages() default {"com.sam4cloud.api"};

    Class<?>[] basePackageClasses() default {};

    Class<?>[] defaultConfiguration() default {};

    Class<?>[] clients() default {};
}